﻿/////////////////////////////////////////////////////////////////
// 参数1  componentType： 'table_xml/component/property/'  componentType +Param.xml 为当前type的配置文件
//                       'defaultData/component/property/' + $.data(div, "componentProperty").options.componentType + 'Param.json',
////////////////////////////////////////////////////////////////

(function(glob) {
	//加载配置文件，并形成界面
	function initFram(div) {
		var body = $(div);

		
		var url = 'table_xml/component/property/' + $.data(div, "componentProperty").options.componentType + 'Param.xml'; // $.data(div, "componentProperty").options.url;
	          
		// prepare the data
		var source  =tableSource(url);
 
		//加载配置文件
		var dataAdapter = new $.jqx.dataAdapter(source, {
			autoBind: true,
			loadComplete: function() {
				// get data records.
				var records = dataAdapter.records;
				var length = records.length;
				 

 

				var propertyEdit = $('<ul class="property_edite"></ul>').appendTo(body);
				var AVC_AGC = false; //AVC-AGC配置分割标志
				for (var i = 0; i < length; i++) {
					var record = records[i];
					//添加AVC  AGC配置分割线，通过字段的AGC标识头来判断，如果标识置位，就不需要再判断了
					if ((record.Field.indexOf("AGC") > -1) && (AVC_AGC == false)) {
						AVC_AGC = true;

						//=====添加本地电压曲线编辑按钮
						var propertyEditItem = $('<li class="property_item"></li>').appendTo(propertyEdit);
						propertyEditItem.addClass("propertyAVC")
						var btn = $('<div  class="property_btn"></div>').attr("id", "local_Vcave").html("本地电压曲线").appendTo(propertyEditItem);
						btn.jqxButton({
							width: 212,
							height: 18,
							theme: theme
						});
						btn.on("click", $.data(div, "componentProperty").options.localVcurveEdit);
						//===== 添加有功无功分割线,只有当有功，无功标志都有的情况下，才显示分割线
						var spline = $('<li class="spline propertyAVC  propertyAGC"  ></li>').appendTo(propertyEdit);
					}
					var propertyEditItem = $('<li class="property_item"></li>').appendTo(propertyEdit);
					//添加 AVC AGC的类标识，以便对AVC,AGC进行分开处理
					if ((record.Field.indexOf("AVC") > -1))
						propertyEditItem.addClass("propertyAVC")
					else if ((record.Field.indexOf("AGC") > -1))
						propertyEditItem.addClass("propertyAGC")
						//alert(record.Field+"=="+record.Field.indexOf("AGC"));

					var desc = $('<div  class="property_desc"></div>').html(record.Desc).appendTo(propertyEditItem);
 
					if (record.DataType == "Enum") {
 				
						if (record.EData) { ////如果是枚举类型数据，获取枚举量，并形添加枚举值到droplist提供选择
	
							var combo = $('<div  style="float:right" class="property_comb" ></div>').attr("id", record.Field).attr("editerType", "jqxDropDownList").appendTo(propertyEditItem);
							var combodata = [];
							var enumval = jQuery.parseJSON(record.EData); //将枚举类型的json字符串转换为json对象，
							// $(enumval).each(function(feild,text){
							$.each(enumval, function(feild, value) { //遍历json对象，形成dropdownlist需要的source对象
								var item = {};
								item["value"] = feild;
								item["text"] = value;
								// alert(feild+"=="+value);
								combodata.push(item);
							});

							combo.jqxDropDownList({
								source: combodata,
								autoDropDownHeight: true,
								displayMember: "text",
								valueMember: "value",
								theme: theme,
								selectedIndex: 0,
								width: 95,
								height: 22
							}).on('change',
								function() {
									//如果值改变了，为该dom添加changed属性，在获取数据进行提交的时候，需要该属性
									$(this).attr("changed", true);
								});
						}
					} else if (record.DataType == "Bool") {
						var value = $('<div   class="property_value" ></div>').attr("id", record.Field).attr("editerType", "jqxSwitchButton").appendTo(propertyEditItem);
						value.jqxSwitchButton({
							height: 22,
							width: 95,
							theme: theme,
							checked: true
						}).on('change',
							function() {
								// alert($(this).attr("id"));
								$(this).attr("changed", true);
							});;


					} else if (record.DataType == "String") { //设置一般的编辑器
						var value = $('<input  class="property_value" />').attr("id", record.Field).attr("editerType", "jqxInput").appendTo(propertyEditItem);

						value.jqxInput({
							placeHolder: "",
							height: 22,
							width: 95,
							theme: theme,
							minLength: 1,
							//对设备id和设备类型是不能更改的。
							disabled: ((record.Field == "EqptId") || (record.Field == "EqptType")) ? true : false
						}).on('change',
							function() {
								$(this).attr("changed", true);
							});;
					} else {
						//设置id和editorType ，editorTyep在，保存数据的时候取值的时候会用到
						var value = $('<div   class="property_value" ></div>').attr("id", record.Field).attr("editerType", "jqxNumberInput").val(record.DefaultValue).appendTo(propertyEditItem);

						value.jqxNumberInput({
							inputMode: 'simple',
							height: 22,
							width: 95,
							theme: theme,

							//对设备id和设备类型是不能更改的。
							disabled: ((record.Field == "EqptId") || (record.Field == "EqptType")) ? true : false
						}).on('change',
							function() {
								//数据发送变化的时候，设置changed属性，保存数据的时候只保存数据变化的项。
								$(this).attr("changed", true);
							});;
					}
				}
				//=====添加本地电压曲线编辑按钮
				if (AVC_AGC) {
					var propertyEditItem = $('<li class="property_item"></li>').appendTo(propertyEdit);
					propertyEditItem.addClass("propertyAGC")
					var btn = $('<div  class="property_btn" ></div>').attr("id", "local_Pcave").html("本地负荷曲线").appendTo(propertyEditItem);
					btn.jqxButton({
						width: 212,
						height: 18,
						theme: theme
					});
					btn.on("click", $.data(div, "componentProperty").options.localPcurveEdit);
				}


				//设置itembody的宽度，让他在layout中始终居中显示。
				var itemwidth = 230; //实际itemde宽度为200 padding 2 margin 3		 
				for (var i = 6; i > 0; i--) {
					//alert($("#prpperty_layout").width());
					if (body.parent().width() > itemwidth * i + 10) {
						$(".spline").width(itemwidth * i - 2);
						body.width(itemwidth * i + 10);
						break;
					}
				}
				////////////////////////////////////////////////////////////
				//根据配置形成界面之后，加载对应的配置数据，添加对应设备的时候就会在后台同步添加对应的配置项。
				//当形成界面的时候就可以使用数据库的默认值功能产生的数据了。
				// 
				// 
				//////////////////////////////////////////////////////////
				$.ajax({
					type: "get",
					url: 'defaultData/component/property/' + $.data(div, "componentProperty").options.componentType + 'Param.json',
					data: {
						componentType: $.data(div, "componentProperty").options.componentType
					},
					dataType: "json",
					complete: function() {
						console.dir("加载完成！");
					},
					success: function(data) {
						// body.parent().jqxPanel({ width: '99.5%', height: 280,theme:theme});
						$.config.ajaxMsg(data);
						/////////////////////////////////////////////////////////
						//设置 AVC-AGC 配置功能是否显示。************************
						/////////////////////////////////////////////////////////
						// $(".propertyAVC").css("display","none");

						//只在成功操作的时候调用回调函数。
						if (data.statusCode == 200) {
							// if (data.data.size != length) {
							// 	var msg = $.data(div, "componentProperty").options.componentType + "数据源与配置文件项不对应:配置文件项长度=" + length + "数据源项长度=" + data.data.size;
							// 	console.warn(msg);
							// 	//请求失败给予提示
							// 	//$.config.ajaxMsg(msg);
							// }
							$.each(data.data, function(field, value) {
								//从服务端，获取当前配置页面的数据记录
								var dom = body.find("#" + field)
									//获取editor类型
								var editor = dom.attr("editerType");
                                 if(editor)
								 
								dom[editor]("val", value); //调用editor类型，设置editor中的值
								// console.dir(field + "==" + editor);
								//	, if($("#aid").attr("rel")=="undefined") 
							});

						} else {
							//请求失败给予提示
							$.config.ajaxMsg(data);
						}
					},
					error: function(XMLHttpRequest, textStatus, errorThrown) {
						$.config.ajaxMsg("加载数据失败！" + errorThrown);
						console.warn("加载数据失败！" + errorThrown);
					}
				});



			}
		});
	
     
	};

	function getVlues(div, optins) {
		var values = {};
		var items = $(div).find('.property_value');
		console.dir("获取数据配置项！" + items.length);
		$.each(items, function() {
			//冲服务端，获取当前配置页面的数据记录
			var editor = $(this).attr("editerType");
			// console.dir($(this).attr("id") + "===" + editor);
			// console.dir($(this)[editor]("val"));
			//只需值已经改变的项
			if ($(this).attr("changed") == "true") {
				var val = $(this)[editor]("val");
				//将boolean转换为number类型
				if (val.constructor == Boolean)
					val = Number(val);
				values[$(this).attr("id")] = val;
				//获取当前变化值之后移除attr
				$(this).removeAttr("changed");

			} else
				console.dir($(this).attr("changed"));


		});

		return values;
	}
	$.fn.componentProperty = function(_a, _b) {

		if (typeof _a == "string") {

			var _c = $.fn.componentProperty.methods[_a];

			if (_c) {
				return _c(this, _b);
			}
		} else
			_a = _a || {};
		return this.each(function() {

			var _c = $.data(this, "componentProperty");
			//查看当前是否已经有item

			if (_c) {
				$.extend(_c.options, _a);
				//如果数据已经初始化，再次执行直接更新数据
				update(this, _a.items);

			} else {

				_c = $.data(this, "componentProperty", {
					options: $.extend(true, {}, $.fn.componentProperty.defaults, _a)
				});

				initFram(this);

			}
		});
	};

	$.fn.componentProperty.defaults = {
		componentType: 'Gen' //'table_xml/component/GenParam.xml'
	};

	$.fn.componentProperty.methods = {

		values: function(jq, _c) {
			//return jq.each(function() {
			return getVlues(jq[0], _c);
			//});

		}
	};
})(jQuery);